export default {

    /**
     * 将str中的str1替换为str2
     */
    replaceStr: function (str, str1, str2) {
        var tRegExp = new RegExp(str1, "g");
        str = str.replace(tRegExp, str2);

        return str;
    }

    /**
     * 获得UUID
     */
    , uuid: function (len, radix) {
        let CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
        let chars = CHARS, uuid = [], i;
        radix = radix || chars.length;

        if (len) {
            // Compact form
            for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
        } else {
            // rfc4122, version 4 form
            let r;
            // rfc4122 requires these characters
            uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
            uuid[14] = '4';
            // Fill in random data.  At i==19 set the high bits of clock sequence as
            // per rfc4122, sec. 4.1.5
            for (i = 0; i < 36; i++) {
                if (!uuid[i]) {
                    r = 0 | Math.random() * 16;
                    uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
                }
            }
        }
        return uuid.join('');
    }

    /***
     * 判断value是否为空，包括null,"",undefined,length=0
     */
    , isEmpty: function (value) {
        if (value == null) {
            return true;
        }
        if (value === "" || value == "") {
            return true;
        }
        if (value == undefined || value == 'undefined') {
            return true;
        }
        if (value.length === 0) {
            return true;
        }
        return false;
    }

    /***
     *判断是否为数字 是数字返回true
     */
    , isNumber: function (value) {
        value += "";
        if (isEmpty(value)) {
            return false;
        }
        if (isNaN(value)) {
            //不是数字，返回
            return false;
        }
        if (value.match(/^[0-9].*$/)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     *验证是否为手机号码
     */
    , isMobile: function (s) {
        if (isEmpty(s)) { return false; };
        //var patrn = /^(13[0-9]{9})|(17[0-9])|(14[0-9])|(18[0-9])|(15[0-9][0-9]{8})$/;
        var patrn = /^(1[0-9]{10})$/;
        if (patrn.test(s)) return true;
        return false;
    }

    /**
     *验证是否为Email
     */
    , isEmail: function (str) {
        if (isEmpty(str)) { return false; };
        if (str.charAt(0) == "." || str.charAt(0) == "@" || str.indexOf('@', 0) == -1 ||
            str.indexOf('.', 0) == -1 || str.lastIndexOf("@") == str.length - 1 ||
            str.lastIndexOf(".") == str.length - 1 ||
            str.indexOf('@.') > -1)
            return false;
        else
            return true;
    }

    /**
     *qq号验证
     */
    , isQQ: function (qq) {
        var filter = /^\s*[.0-9]{5,11}\s*$/;
        if (!filter.test(qq)) {
            return false;
        } else {
            return true;
        }
    }

    /*
     * 验证身份证号
     * N为有效身份证号码时返回true
     */
    , isIdCard: function (N) {
        //转换为小写，防止最后一位x是大写
        N = N.toLowerCase();
        // 此方法比起其他的身份证验证的好处在于生日部分验证了有效性
        var r = /^[1-9]\d{5}[0-9]{4}(((0[13578]|(10|12))(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)(0[1-9]|[1-2][0-9]|30)))\d{3}[0-9|x]$/;
        //正则验证是否有效
        if (!r.test(N)) {
            return false;
        }

        //身份证验证：累乘因数
        var arr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        //身份证验证：效验码
        var checkArr = new Array('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2');
        //身份证验证：前17位各位累加和
        var sum = 0;
        //身份证验证：最后一位理论码
        var lastNo = '';

        //前17位，相乘后累加
        for (var i = 0, v = 0; i < 17; i++) {
            v = N.charAt(i) * arr[i];
            sum += v;
        }

        //判断最后一位效验码
        lastNo = checkArr[sum % 11];
        if (N.charAt(17) == lastNo) {
            return true;
        } else {
            return false;
        }
    }
}